package com.margo.project.redis.service;

import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.stereotype.Service;
/**
 * 操作set
 * @author fangxingbang
 *  历史：@Autowired        
 *  属于Spring的注解　　　　　　　　　　　　    org.springframework.beans.factory.annotation.Autowired
 *  @Resource　　 不属于Spring的注解，JDK1.6支持的注解　　　 javax.annotation.Resource
 *  共同点：
 *  装配bean. 写在字段上,或写在setter方法
 *  不同点：
 *  @Autowired  默认按类型装配 　　
 *  依赖对象必须存在，如果要允许null值，可以设置它的required属性为false   @Autowired(required=false)
 *  
 *  @Resource  默认按名称进行装配，通过name属性进行指定
 */
@Service
public class RedisSetOperationsServiceImpl<T> {
	@Autowired
	protected RedisTemplate<String, Object> redisTemplate;
	@Autowired
	protected SetOperations<String, Object> setOperations;

	private static final String REDIS_KEY = "REDIS_SET_KEY";
	
	protected String getRedisKey() {
		return RedisSetOperationsServiceImpl.REDIS_KEY;
	}
	
	public void add(T t) {
		setOperations.add(getRedisKey(), t);
	}
	
	public Set<Object> read() {
		return setOperations.members(getRedisKey());
	}
	
	
	public Object pop() {
		return setOperations.pop(getRedisKey());
	}
}
